// --------------------------------------
    // 排序算法
        //对常见的排序算法进行性能测试并比较
        //插入、冒泡、选择、希尔、归并、堆、快速、
// --------------------------------------


#include "sort.hpp"
#include <chrono>
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <random>

using namespace std;

//得到随机数组用于后续测试
vector<int> GetRandNum(int N){
    //C语言版
    vector<int> randnum(N,0);
    srand((unsigned int)time(NULL));
    for(int i=0;i<N;++i){
        randnum[i]=rand();
    }
    return randnum;
    // //C++版
    // std::random_device rd;
    // std::
}
void PrintArr(vector<int>& arr){
    for(auto e:arr){
        cout<<e<<" ";
    }
    cout<<"\n";
}
void test(){
    vector<int> arr=GetRandNum(20);
    vector<int> arr2(arr);
    vector<int> arr3(arr);
    vector<int> arr4(arr);
    vector<int> arr5(arr);
    vector<int> arr6(arr);
    vector<int> arr7(arr);
    vector<int> arr8(arr);
    cout<<"原始数组为：";
    PrintArr(arr);
    std::cout<<"-----插入排序-----"<<std::endl;
    ymbxUtil::InsertSort(arr2);
    cout<<"插入排序结果：";
    PrintArr(arr2);
    std::cout<<"-----选择排序-----"<<std::endl;
    ymbxUtil::SelectSort(arr3);
    cout<<"选择排序结果：";
    PrintArr(arr3);
    std::cout<<"-----冒泡排序-----"<<std::endl;
    ymbxUtil::BubbleSort(arr4);
    cout<<"冒泡排序结果：";
    PrintArr(arr4);
    std::cout<<"-----希尔排序-----"<<std::endl;
    ymbxUtil::ShellSort(arr5);
    cout<<"希尔排序结果：";
    PrintArr(arr5);
    std::cout<<"-----归并排序-----"<<std::endl;
    ymbxUtil::MergeSort(arr6);
    cout<<"归并排序结果：";
    PrintArr(arr6);
    std::cout<<"-----快速排序-----"<<std::endl;
    ymbxUtil::QuickSort(arr7);
    cout<<"快速排序结果：";
    PrintArr(arr7);
    std::cout<<"-----堆排序-----"<<std::endl;
    ymbxUtil::HeapSort(arr8);
    cout<<"堆排序结果：";
    PrintArr(arr8);
}
int main(){
    test();
    return 0;
}

